🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / feature / node / src / commonMain / kotlin / org / meshtastic / feature / node / component / CompassBottomSheet.kt
Displaying Raw • Download
feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/CompassBottomSheet.kt 520fa717a938fd84682403b41f57d9f7e1ef49ef (520fa717) Text, 18.34 KB
T8b949e/*
* Copyright (c) 2025-2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.node.component
Tff7b72import T7ee787androidx.compose.foundation.Canvas
Tff7b72import T7ee787androidx.compose.foundation.layout.Arrangement
Tff7b72import T7ee787androidx.compose.foundation.layout.Column
Tff7b72import T7ee787androidx.compose.foundation.layout.Row
Tff7b72import T7ee787androidx.compose.foundation.layout.Spacer
Tff7b72import T7ee787androidx.compose.foundation.layout.aspectRatio
Tff7b72import T7ee787androidx.compose.foundation.layout.fillMaxWidth
Tff7b72import T7ee787androidx.compose.foundation.layout.padding
Tff7b72import T7ee787androidx.compose.foundation.layout.width
Tff7b72import T7ee787androidx.compose.material3.Button
Tff7b72import T7ee787androidx.compose.material3.Icon
Tff7b72import T7ee787androidx.compose.material3.MaterialTheme
Tff7b72import T7ee787androidx.compose.material3.Surface
Tff7b72import T7ee787androidx.compose.material3.Text
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.LaunchedEffect
Tff7b72import T7ee787androidx.compose.ui.Alignment
Tff7b72import T7ee787androidx.compose.ui.Modifier
Tff7b72import T7ee787androidx.compose.ui.geometry.Offset
Tff7b72import T7ee787androidx.compose.ui.geometry.Size
Tff7b72import T7ee787androidx.compose.ui.graphics.Color
Tff7b72import T7ee787androidx.compose.ui.graphics.Path
Tff7b72import T7ee787androidx.compose.ui.graphics.StrokeCap
Tff7b72import T7ee787androidx.compose.ui.graphics.drawscope.DrawScope
Tff7b72import T7ee787androidx.compose.ui.graphics.drawscope.Stroke
Tff7b72import T7ee787androidx.compose.ui.graphics.drawscope.rotate
Tff7b72import T7ee787androidx.compose.ui.graphics.drawscope.withTransform
Tff7b72import T7ee787androidx.compose.ui.hapticfeedback.HapticFeedbackType
Tff7b72import T7ee787androidx.compose.ui.platform.LocalHapticFeedback
Tff7b72import T7ee787androidx.compose.ui.text.TextStyle
Tff7b72import T7ee787androidx.compose.ui.text.drawText
Tff7b72import T7ee787androidx.compose.ui.text.font.FontWeight
Tff7b72import T7ee787androidx.compose.ui.text.rememberTextMeasurer
Tff7b72import T7ee787androidx.compose.ui.unit.dp
Tff7b72import T7ee787androidx.compose.ui.unit.sp
Tff7b72import T7ee787org.jetbrains.compose.resources.stringResource
Tff7b72import T7ee787org.meshtastic.core.common.util.formatString
Tff7b72import T7ee787org.meshtastic.core.resources.Res
Tff7b72import T7ee787org.meshtastic.core.resources.compass_bearing
Tff7b72import T7ee787org.meshtastic.core.resources.compass_bearing_na
Tff7b72import T7ee787org.meshtastic.core.resources.compass_distance
Tff7b72import T7ee787org.meshtastic.core.resources.compass_location_disabled
Tff7b72import T7ee787org.meshtastic.core.resources.compass_no_location_fix
Tff7b72import T7ee787org.meshtastic.core.resources.compass_no_location_permission
Tff7b72import T7ee787org.meshtastic.core.resources.compass_no_magnetometer
Tff7b72import T7ee787org.meshtastic.core.resources.compass_title
Tff7b72import T7ee787org.meshtastic.core.resources.compass_uncertainty
Tff7b72import T7ee787org.meshtastic.core.resources.compass_uncertainty_unknown
Tff7b72import T7ee787org.meshtastic.core.resources.elevation_suffix
Tff7b72import T7ee787org.meshtastic.core.resources.exchange_position
Tff7b72import T7ee787org.meshtastic.core.resources.last_position_update
Tff7b72import T7ee787org.meshtastic.core.ui.icon.ErrorOutline
Tff7b72import T7ee787org.meshtastic.core.ui.icon.GpsFixed
Tff7b72import T7ee787org.meshtastic.core.ui.icon.MeshtasticIcons
Tff7b72import T7ee787org.meshtastic.feature.node.compass.CompassUiState
Tff7b72import T7ee787org.meshtastic.feature.node.compass.CompassWarning
Tff7b72import T7ee787kotlin.math.PI
Tff7b72import T7ee787kotlin.math.cos
Tff7b72import T7ee787kotlin.math.sin
Tff7b72private Tff7b72const Tff7b72val Te6edf3DIAL_WIDTH_FRACTION Tff7b72= T79c0ff0.66f
Tf0883e@Composable
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72fun Td2a8ffCompassSheetContentTb4b4b4(
Te6edf3uiStateTb4b4b4: Te6edf3CompassUiStateTb4b4b4,
Te6edf3onRequestLocationPermissionTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onOpenLocationSettingsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onRequestPositionTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3haptics Tff7b72= Te6edf3LocalHapticFeedbackTb4b4b4.Te6edf3current
Te6edf3LaunchedEffectTb4b4b4(Te6edf3uiStateTb4b4b4.Te6edf3isAlignedTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3uiStateTb4b4b4.Te6edf3isAlignedTb4b4b4) Te6edf3hapticsTb4b4b4.Te6edf3performHapticFeedbackTb4b4b4(Te6edf3HapticFeedbackTypeTb4b4b4.Te6edf3LongPressTb4b4b4)
Tb4b4b4}
Te6edf3ColumnTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff2T79c0ff4.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3verticalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff1T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterHorizontallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_titleTb4b4b4)Tb4b4b4, Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3headlineSmallTb4b4b4)
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3targetNameTb4b4b4, Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3titleMediumTb4b4b4, Te6edf3color Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3targetColorTb4b4b4)
Te6edf3CompassDialTb4b4b4(
Te6edf3heading Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3headingTb4b4b4,
Te6edf3bearing Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3bearingTb4b4b4,
Te6edf3angularErrorDeg Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3angularErrorDegTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Te6edf3DIAL_WIDTH_FRACTIONTb4b4b4)Tb4b4b4.Te6edf3aspectRatioTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Te6edf3markerColor Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3targetColorTb4b4b4,
Tb4b4b4)
Te6edf3RowTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceEvenlyTb4b4b4) Tb4b4b4{
Te6edf3ColumnTb4b4b4(Te6edf3horizontalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterHorizontallyTb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_distanceTb4b4b4, Te6edf3uiStateTb4b4b4.Te6edf3distanceText Tff7b72?: Ta5d6ff"Ta5d6ff--Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4,
Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72=
Te6edf3uiStateTb4b4b4.Te6edf3bearingTextTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_bearingTb4b4b4, Tffa657itTb4b4b4) Tb4b4b4}
Tff7b72?: Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_bearing_naTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4,
Tb4b4b4)
Te6edf3RowTb4b4b4(
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72=
Te6edf3uiStateTb4b4b4.Te6edf3errorRadiusTextTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3radius Tff7b72-Tff7b72>
Tff7b72val Te6edf3angle Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3angularErrorDegTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3formatStringTb4b4b4(Ta5d6ff"Ta5d6ff%.0f°Ta5d6ff"Tb4b4b4, Tffa657itTb4b4b4) Tb4b4b4} Tff7b72?: Ta5d6ff"Ta5d6ff?Ta5d6ff"
Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_uncertaintyTb4b4b4, Te6edf3radiusTb4b4b4, Te6edf3angleTb4b4b4)
Tb4b4b4} Tff7b72?: Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_uncertainty_unknownTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyMediumTb4b4b4,
Tb4b4b4)
Te6edf3uiStateTb4b4b4.Te6edf3targetAltitudeTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3altitude Tff7b72-Tff7b72>
Te6edf3ElevationInfoTb4b4b4(
Te6edf3altitude Tff7b72= Te6edf3altitudeTb4b4b4,
Te6edf3system Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3displayUnitsTb4b4b4,
Te6edf3suffix Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3elevation_suffixTb4b4b4)Tb4b4b4,
Te6edf3contentColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Te6edf3uiStateTb4b4b4.Te6edf3lastUpdateTextTff7b72?.Te6edf3let Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3last_position_updateTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff: Tffd700$Te6edf3itTa5d6ff"Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyMediumTb4b4b4,
Tb4b4b4)
T8b949e// Quick way to re-request a fresh fix without leaving the compass sheet
Te6edf3ButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onRequestPositionTb4b4b4, Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3GpsFixedTb4b4b4, Te6edf3contentDescription Tff7b72= Tff7b72nullTb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3widthTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3exchange_positionTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3uiStateTb4b4b4.Te6edf3warningsTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3WarningListTb4b4b4(
Te6edf3warnings Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3warningsTb4b4b4,
Te6edf3onRequestPermission Tff7b72= Te6edf3onRequestLocationPermissionTb4b4b4,
Te6edf3onOpenLocationSettings Tff7b72= Te6edf3onOpenLocationSettingsTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffWarningListTb4b4b4(
Te6edf3warningsTb4b4b4: Te6edf3ListTff7b72<Te6edf3CompassWarningTff7b72>Tb4b4b4,
Te6edf3onRequestPermissionTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onOpenLocationSettingsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3verticalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3warningsTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3warning Tff7b72-Tff7b72>
Te6edf3SurfaceTb4b4b4(
Te6edf3tonalElevation Tff7b72= T79c0ff2.Te6edf3dpTb4b4b4,
Te6edf3shape Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3shapesTb4b4b4.Te6edf3mediumTb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3errorContainerTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(T79c0ff1T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff1T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ErrorOutlineTb4b4b4,
Te6edf3contentDescription Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3tint Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onErrorContainerTb4b4b4,
Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3warningTextTb4b4b4(Te6edf3warningTb4b4b4)Tb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onErrorContainerTb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyMediumTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3warningsTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3CompassWarningTb4b4b4.Te6edf3NO_LOCATION_PERMISSIONTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3ButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onRequestPermissionTb4b4b4, Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3GpsFixedTb4b4b4, Te6edf3contentDescription Tff7b72= Tff7b72nullTb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3widthTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_no_location_permissionTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3warningsTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3CompassWarningTb4b4b4.Te6edf3LOCATION_DISABLEDTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3ButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onOpenLocationSettingsTb4b4b4, Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3GpsFixedTb4b4b4, Te6edf3contentDescription Tff7b72= Tff7b72nullTb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3widthTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_location_disabledTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffwarningTextTb4b4b4(Te6edf3warningTb4b4b4: Te6edf3CompassWarningTb4b4b4)Tb4b4b4: Tffa657String Tff7b72= Tff7b72when Tb4b4b4(Te6edf3warningTb4b4b4) Tb4b4b4{
Te6edf3CompassWarningTb4b4b4.Te6edf3NO_MAGNETOMETER Tff7b72-Tff7b72> Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_no_magnetometerTb4b4b4)
Te6edf3CompassWarningTb4b4b4.Te6edf3NO_LOCATION_PERMISSION Tff7b72-Tff7b72> Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_no_location_permissionTb4b4b4)
Te6edf3CompassWarningTb4b4b4.Te6edf3LOCATION_DISABLED Tff7b72-Tff7b72> Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_location_disabledTb4b4b4)
Te6edf3CompassWarningTb4b4b4.Te6edf3NO_LOCATION_FIX Tff7b72-Tff7b72> Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_no_location_fixTb4b4b4)
Tb4b4b4}
Tf0883e@Composable
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCyclomaticComplexMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72fun Td2a8ffCompassDialTb4b4b4(
Te6edf3headingTb4b4b4: Tffa657Float?Tb4b4b4,
Te6edf3bearingTb4b4b4: Tffa657Float?Tb4b4b4,
Te6edf3angularErrorDegTb4b4b4: Tffa657Float?Tb4b4b4,
Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4,
Te6edf3markerColorTb4b4b4: Te6edf3Color Tff7b72= Te6edf3ColorTb4b4b4(T79c0ff0Te6edf3xFF2196F3Tb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3compassRoseColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3primary
Tff7b72val Te6edf3tickColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurface
Tff7b72val Te6edf3cardinalColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3primary
Tff7b72val Te6edf3degreeTextColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariant
Tff7b72val Te6edf3northPointerColor Tff7b72= Te6edf3ColorTb4b4b4.Te6edf3Red
Tff7b72val Te6edf3headingIndicatorColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3secondary
Tff7b72val Te6edf3textMeasurer Tff7b72= Te6edf3rememberTextMeasurerTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3cardinalStyle Tff7b72= Te6edf3TextStyleTb4b4b4(Te6edf3fontSize Tff7b72= T79c0ff2T79c0ff4.Te6edf3spTb4b4b4, Te6edf3fontWeight Tff7b72= Te6edf3FontWeightTb4b4b4.Te6edf3BoldTb4b4b4)
Tff7b72val Te6edf3degreeStyle Tff7b72= Te6edf3TextStyleTb4b4b4(Te6edf3fontSize Tff7b72= T79c0ff1T79c0ff2.Te6edf3spTb4b4b4, Te6edf3fontWeight Tff7b72= Te6edf3FontWeightTb4b4b4.Te6edf3MediumTb4b4b4)
Te6edf3CanvasTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3center Tff7b72= Te6edf3OffsetTb4b4b4(Te6edf3sizeTb4b4b4.Te6edf3width Tff7b72/ T79c0ff2fTb4b4b4, Te6edf3sizeTb4b4b4.Te6edf3height Tff7b72/ T79c0ff2fTb4b4b4)
Tff7b72val Te6edf3radius Tff7b72= Te6edf3sizeTb4b4b4.Te6edf3minDimension Tff7b72/ T79c0ff2f Tff7b72* T79c0ff0.88f
Tff7b72val Te6edf3ringStroke Tff7b72= T79c0ff3.Te6edf3dpTb4b4b4.Te6edf3toPxTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3currentHeading Tff7b72= Te6edf3heading Tff7b72?: T79c0ff0f
Tff7b72val Te6edf3currentBearing Tff7b72= Te6edf3bearing
Te6edf3rotateTb4b4b4(Tff7b72-Te6edf3currentHeadingTb4b4b4, Te6edf3centerTb4b4b4) Tb4b4b4{
T8b949e// Compass circles
Te6edf3drawCircleTb4b4b4(Te6edf3color Tff7b72= Te6edf3compassRoseColorTb4b4b4, Te6edf3radius Tff7b72= Te6edf3radiusTb4b4b4, Te6edf3center Tff7b72= Te6edf3centerTb4b4b4, Te6edf3style Tff7b72= Te6edf3StrokeTb4b4b4(Te6edf3width Tff7b72= Te6edf3ringStrokeTb4b4b4)Tb4b4b4)
Te6edf3drawCircleTb4b4b4(
Te6edf3color Tff7b72= Te6edf3compassRoseColorTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3alpha Tff7b72= T79c0ff0.35fTb4b4b4)Tb4b4b4,
Te6edf3radius Tff7b72= Te6edf3radius Tff7b72* T79c0ff0.85fTb4b4b4,
Te6edf3center Tff7b72= Te6edf3centerTb4b4b4,
Te6edf3style Tff7b72= Te6edf3StrokeTb4b4b4(Te6edf3width Tff7b72= T79c0ff1.Te6edf3dpTb4b4b4.Te6edf3toPxTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4)
T8b949e// Tick marks
Tff7b72for Tb4b4b4(Te6edf3deg Tff7b72in T79c0ff0 Te6edf3until T79c0ff3T79c0ff6T79c0ff0 Te6edf3step T79c0ff5Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3isCardinal Tff7b72= Te6edf3deg Tff7b72% T79c0ff9T79c0ff0 Tff7b72=Tff7b72= T79c0ff0
Tff7b72val Te6edf3isMajor Tff7b72= Te6edf3deg Tff7b72% T79c0ff3T79c0ff0 Tff7b72=Tff7b72= T79c0ff0
Tff7b72val Te6edf3tickLength Tff7b72=
Tff7b72when Tb4b4b4{
Te6edf3isCardinal Tff7b72-Tff7b72> Te6edf3radius Tff7b72* T79c0ff0.14f
Te6edf3isMajor Tff7b72-Tff7b72> Te6edf3radius Tff7b72* T79c0ff0.09f
Tff7b72else Tff7b72-Tff7b72> Te6edf3radius Tff7b72* T79c0ff0.045f
Tb4b4b4}
Tff7b72val Te6edf3tickWidth Tff7b72=
Tff7b72when Tb4b4b4{
Te6edf3isCardinal Tff7b72-Tff7b72> T79c0ff3.Te6edf3dpTb4b4b4.Te6edf3toPxTb4b4b4(Tb4b4b4)
Te6edf3isMajor Tff7b72-Tff7b72> T79c0ff2.Te6edf3dpTb4b4b4.Te6edf3toPxTb4b4b4(Tb4b4b4)
Tff7b72else Tff7b72-Tff7b72> T79c0ff1.Te6edf3dpTb4b4b4.Te6edf3toPxTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3angle Tff7b72= Tb4b4b4(Te6edf3deg Tff7b72* Te6edf3PI Tff7b72/ T79c0ff1T79c0ff8T79c0ff0.0Tb4b4b4)
Tff7b72val Te6edf3outer Tff7b72= Te6edf3OffsetTb4b4b4(Te6edf3centerTb4b4b4.Te6edf3x Tff7b72+ Te6edf3radius Tff7b72* Te6edf3sinTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Te6edf3radius Tff7b72* Te6edf3cosTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3inner Tff7b72=
Te6edf3OffsetTb4b4b4(
Te6edf3centerTb4b4b4.Te6edf3x Tff7b72+ Tb4b4b4(Te6edf3radius Tff7b72- Te6edf3tickLengthTb4b4b4) Tff7b72* Te6edf3sinTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Tb4b4b4(Te6edf3radius Tff7b72- Te6edf3tickLengthTb4b4b4) Tff7b72* Te6edf3cosTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3drawLineTb4b4b4(
Te6edf3color Tff7b72= Tff7b72if Tb4b4b4(Te6edf3deg Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Te6edf3northPointerColor Tff7b72else Te6edf3tickColorTb4b4b4,
Te6edf3start Tff7b72= Te6edf3innerTb4b4b4,
Te6edf3end Tff7b72= Te6edf3outerTb4b4b4,
Te6edf3strokeWidth Tff7b72= Te6edf3tickWidthTb4b4b4,
Te6edf3cap Tff7b72= Te6edf3StrokeCapTb4b4b4.Te6edf3RoundTb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e// Compass rose center
Te6edf3drawCompassRoseCenterTb4b4b4(Te6edf3center Tff7b72= Te6edf3centerTb4b4b4, Te6edf3size Tff7b72= Te6edf3radius Tff7b72* T79c0ff0.13fTb4b4b4, Te6edf3color Tff7b72= Te6edf3compassRoseColorTb4b4b4)
T8b949e// Cardinal labels (moved closer to center)
Tff7b72val Te6edf3cardinalRadius Tff7b72= Te6edf3radius Tff7b72* T79c0ff0.48f
Tff7b72val Te6edf3cardinals Tff7b72=
Te6edf3listOfTb4b4b4(
Te6edf3TripleTb4b4b4(Ta5d6ff"Ta5d6ffNTa5d6ff"Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3northPointerColorTb4b4b4)Tb4b4b4,
Te6edf3TripleTb4b4b4(Ta5d6ff"Ta5d6ffETa5d6ff"Tb4b4b4, T79c0ff9T79c0ff0Tb4b4b4, Te6edf3cardinalColorTb4b4b4)Tb4b4b4,
Te6edf3TripleTb4b4b4(Ta5d6ff"Ta5d6ffSTa5d6ff"Tb4b4b4, T79c0ff1T79c0ff8T79c0ff0Tb4b4b4, Te6edf3cardinalColorTb4b4b4)Tb4b4b4,
Te6edf3TripleTb4b4b4(Ta5d6ff"Ta5d6ffWTa5d6ff"Tb4b4b4, T79c0ff2T79c0ff7T79c0ff0Tb4b4b4, Te6edf3cardinalColorTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72for Tb4b4b4(Tb4b4b4(Te6edf3labelTb4b4b4, Te6edf3degTb4b4b4, Te6edf3colorTb4b4b4) Tff7b72in Te6edf3cardinalsTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3angle Tff7b72= Tb4b4b4(Te6edf3deg Tff7b72* Te6edf3PI Tff7b72/ T79c0ff1T79c0ff8T79c0ff0.0Tb4b4b4)
Tff7b72val Te6edf3x Tff7b72= Te6edf3centerTb4b4b4.Te6edf3x Tff7b72+ Te6edf3cardinalRadius Tff7b72* Te6edf3sinTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3y Tff7b72= Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Te6edf3cardinalRadius Tff7b72* Te6edf3cosTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3layout Tff7b72= Te6edf3textMeasurerTb4b4b4.Te6edf3measureTb4b4b4(Te6edf3labelTb4b4b4, Te6edf3style Tff7b72= Te6edf3cardinalStyleTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3color Tff7b72= Te6edf3colorTb4b4b4)Tb4b4b4)
Te6edf3withTransformTb4b4b4(Tb4b4b4{ Te6edf3rotateTb4b4b4(Te6edf3currentHeadingTb4b4b4, Te6edf3OffsetTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3drawTextTb4b4b4(
Te6edf3textLayoutResult Tff7b72= Te6edf3layoutTb4b4b4,
Te6edf3topLeft Tff7b72= Te6edf3OffsetTb4b4b4(Te6edf3x Tff7b72- Te6edf3layoutTb4b4b4.Te6edf3sizeTb4b4b4.Te6edf3width Tff7b72/ T79c0ff2fTb4b4b4, Te6edf3y Tff7b72- Te6edf3layoutTb4b4b4.Te6edf3sizeTb4b4b4.Te6edf3height Tff7b72/ T79c0ff2fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
T8b949e// Degree labels
Tff7b72val Te6edf3degRadius Tff7b72= Te6edf3radius Tff7b72* T79c0ff0.72f
Tff7b72for Tb4b4b4(Te6edf3d Tff7b72in T79c0ff0 Te6edf3until T79c0ff3T79c0ff6T79c0ff0 Te6edf3step T79c0ff3T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3angle Tff7b72= Tb4b4b4(Te6edf3d Tff7b72* Te6edf3PI Tff7b72/ T79c0ff1T79c0ff8T79c0ff0.0Tb4b4b4)
Tff7b72val Te6edf3x Tff7b72= Te6edf3centerTb4b4b4.Te6edf3x Tff7b72+ Te6edf3degRadius Tff7b72* Te6edf3sinTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3y Tff7b72= Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Te6edf3degRadius Tff7b72* Te6edf3cosTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3layout Tff7b72= Te6edf3textMeasurerTb4b4b4.Te6edf3measureTb4b4b4(Te6edf3dTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3style Tff7b72= Te6edf3degreeStyleTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3color Tff7b72= Te6edf3degreeTextColorTb4b4b4)Tb4b4b4)
Te6edf3withTransformTb4b4b4(Tb4b4b4{ Te6edf3rotateTb4b4b4(Te6edf3currentHeadingTb4b4b4, Te6edf3OffsetTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3drawTextTb4b4b4(
Te6edf3textLayoutResult Tff7b72= Te6edf3layoutTb4b4b4,
Te6edf3topLeft Tff7b72= Te6edf3OffsetTb4b4b4(Te6edf3x Tff7b72- Te6edf3layoutTb4b4b4.Te6edf3sizeTb4b4b4.Te6edf3width Tff7b72/ T79c0ff2fTb4b4b4, Te6edf3y Tff7b72- Te6edf3layoutTb4b4b4.Te6edf3sizeTb4b4b4.Te6edf3height Tff7b72/ T79c0ff2fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
T8b949e// Bearing marker (adjust bearing by current heading because the canvas is rotated)
Tff7b72val Te6edf3bearingForDraw Tff7b72= Te6edf3currentBearing
Tff7b72if Tb4b4b4(Te6edf3bearingForDraw Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3angularErrorDeg Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3angularErrorDeg Tff7b72> T79c0ff0fTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3arcRadius Tff7b72= Te6edf3radius Tff7b72* T79c0ff0.82f
Tff7b72val Te6edf3startAngleNorth Tff7b72= Te6edf3bearingForDraw Tff7b72- Te6edf3angularErrorDeg
Tff7b72val Te6edf3sweep Tff7b72= Te6edf3angularErrorDeg Tff7b72* T79c0ff2f
Tff7b72val Te6edf3faint Tff7b72= Te6edf3markerColorTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3alpha Tff7b72= T79c0ff0.18fTb4b4b4)
T8b949e// Canvas drawArc: 0deg = 3 o'clock, +clockwise. Convert north=0° to that space.
Tff7b72val Te6edf3startAngleCanvas Tff7b72= Tb4b4b4(Te6edf3startAngleNorth Tff7b72- T79c0ff9T79c0ff0fTb4b4b4)Tb4b4b4.Te6edf3normalizeDegreesTb4b4b4(Tb4b4b4)
T8b949e// Filled wedge for the cone shading.
Te6edf3drawArcTb4b4b4(
Te6edf3color Tff7b72= Te6edf3faintTb4b4b4,
Te6edf3startAngle Tff7b72= Te6edf3startAngleCanvasTb4b4b4,
Te6edf3sweepAngle Tff7b72= Te6edf3sweepTb4b4b4,
Te6edf3useCenter Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3topLeft Tff7b72= Te6edf3OffsetTb4b4b4(Te6edf3centerTb4b4b4.Te6edf3x Tff7b72- Te6edf3arcRadiusTb4b4b4, Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Te6edf3arcRadiusTb4b4b4)Tb4b4b4,
Te6edf3size Tff7b72= Te6edf3SizeTb4b4b4(Te6edf3arcRadius Tff7b72* T79c0ff2Tb4b4b4, Te6edf3arcRadius Tff7b72* T79c0ff2Tb4b4b4)Tb4b4b4,
Tb4b4b4)
T8b949e// Cone edge lines for clarity
Tff7b72val Te6edf3edgeRadius Tff7b72= Te6edf3arcRadius
Tff7b72val Te6edf3startRad Tff7b72= Tb4b4b4(Te6edf3startAngleNorth Tff7b72* Te6edf3PI Tff7b72/ T79c0ff1T79c0ff8T79c0ff0.0Tb4b4b4)
Tff7b72val Te6edf3endRad Tff7b72= Tb4b4b4(Tb4b4b4(Te6edf3startAngleNorth Tff7b72+ Te6edf3sweepTb4b4b4) Tff7b72* Te6edf3PI Tff7b72/ T79c0ff1T79c0ff8T79c0ff0.0Tb4b4b4)
Tff7b72val Te6edf3startEnd Tff7b72=
Te6edf3OffsetTb4b4b4(
Te6edf3centerTb4b4b4.Te6edf3x Tff7b72+ Te6edf3edgeRadius Tff7b72* Te6edf3sinTb4b4b4(Te6edf3startRadTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Te6edf3edgeRadius Tff7b72* Te6edf3cosTb4b4b4(Te6edf3startRadTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72val Te6edf3endEnd Tff7b72=
Te6edf3OffsetTb4b4b4(Te6edf3centerTb4b4b4.Te6edf3x Tff7b72+ Te6edf3edgeRadius Tff7b72* Te6edf3sinTb4b4b4(Te6edf3endRadTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Te6edf3edgeRadius Tff7b72* Te6edf3cosTb4b4b4(Te6edf3endRadTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3drawLineTb4b4b4(Te6edf3color Tff7b72= Te6edf3faintTb4b4b4, Te6edf3start Tff7b72= Te6edf3centerTb4b4b4, Te6edf3end Tff7b72= Te6edf3startEndTb4b4b4, Te6edf3strokeWidth Tff7b72= T79c0ff6fTb4b4b4, Te6edf3cap Tff7b72= Te6edf3StrokeCapTb4b4b4.Te6edf3RoundTb4b4b4)
Te6edf3drawLineTb4b4b4(Te6edf3color Tff7b72= Te6edf3faintTb4b4b4, Te6edf3start Tff7b72= Te6edf3centerTb4b4b4, Te6edf3end Tff7b72= Te6edf3endEndTb4b4b4, Te6edf3strokeWidth Tff7b72= T79c0ff6fTb4b4b4, Te6edf3cap Tff7b72= Te6edf3StrokeCapTb4b4b4.Te6edf3RoundTb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3bearingForDraw Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3angle Tff7b72= Tb4b4b4(Te6edf3bearingForDraw Tff7b72* Te6edf3PI Tff7b72/ T79c0ff1T79c0ff8T79c0ff0.0Tb4b4b4)
Tff7b72val Te6edf3dot Tff7b72=
Te6edf3OffsetTb4b4b4(
Te6edf3centerTb4b4b4.Te6edf3x Tff7b72+ Tb4b4b4(Te6edf3radius Tff7b72* T79c0ff0.95fTb4b4b4) Tff7b72* Te6edf3sinTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Tb4b4b4(Te6edf3radius Tff7b72* T79c0ff0.95fTb4b4b4) Tff7b72* Te6edf3cosTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3drawCircleTb4b4b4(Te6edf3color Tff7b72= Te6edf3markerColorTb4b4b4, Te6edf3radius Tff7b72= T79c0ff1T79c0ff0.Te6edf3dpTb4b4b4.Te6edf3toPxTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3center Tff7b72= Te6edf3dotTb4b4b4)
Tb4b4b4}
Tb4b4b4}
T8b949e// Heading indicator as a simple line
Tff7b72if Tb4b4b4(Te6edf3heading Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3headingEnd Tff7b72= Te6edf3OffsetTb4b4b4(Te6edf3centerTb4b4b4.Te6edf3xTb4b4b4, Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Te6edf3radius Tff7b72* T79c0ff0.78fTb4b4b4)
Te6edf3drawLineTb4b4b4(
Te6edf3color Tff7b72= Te6edf3headingIndicatorColorTb4b4b4,
Te6edf3start Tff7b72= Te6edf3centerTb4b4b4,
Te6edf3end Tff7b72= Te6edf3headingEndTb4b4b4,
Te6edf3strokeWidth Tff7b72= T79c0ff6.Te6edf3dpTb4b4b4.Te6edf3toPxTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3cap Tff7b72= Te6edf3StrokeCapTb4b4b4.Te6edf3RoundTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72fun Te6edf3DrawScopeTb4b4b4.Td2a8ffdrawCompassRoseCenterTb4b4b4(Te6edf3centerTb4b4b4: Te6edf3OffsetTb4b4b4, Te6edf3sizeTb4b4b4: Tffa657FloatTb4b4b4, Te6edf3colorTb4b4b4: Te6edf3ColorTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3path Tff7b72=
Te6edf3PathTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3moveToTb4b4b4(Te6edf3centerTb4b4b4.Te6edf3xTb4b4b4, Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Te6edf3sizeTb4b4b4)
Te6edf3lineToTb4b4b4(Te6edf3centerTb4b4b4.Te6edf3x Tff7b72+ Te6edf3size Tff7b72* T79c0ff0.35fTb4b4b4, Te6edf3centerTb4b4b4.Te6edf3yTb4b4b4)
Te6edf3lineToTb4b4b4(Te6edf3centerTb4b4b4.Te6edf3xTb4b4b4, Te6edf3centerTb4b4b4.Te6edf3y Tff7b72+ Te6edf3size Tff7b72* T79c0ff0.35fTb4b4b4)
Te6edf3lineToTb4b4b4(Te6edf3centerTb4b4b4.Te6edf3x Tff7b72- Te6edf3size Tff7b72* T79c0ff0.35fTb4b4b4, Te6edf3centerTb4b4b4.Te6edf3yTb4b4b4)
Te6edf3closeTb4b4b4(Tb4b4b4)
Tb4b4b4}
Te6edf3drawPathTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3colorTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3alpha Tff7b72= T79c0ff0.5fTb4b4b4)Tb4b4b4)
Te6edf3drawCircleTb4b4b4(Te6edf3color Tff7b72= Te6edf3colorTb4b4b4, Te6edf3radius Tff7b72= Te6edf3size Tff7b72* T79c0ff0.25fTb4b4b4, Te6edf3center Tff7b72= Te6edf3centerTb4b4b4)
Tb4b4b4}
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72fun Te6edf3FloatTb4b4b4.Td2a8ffnormalizeDegreesTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Float Tb4b4b4{
Tff7b72val Te6edf3normalized Tff7b72= Tff7b72this Tff7b72% T79c0ff3T79c0ff6T79c0ff0f
Tff7b72return Tff7b72if Tb4b4b4(Te6edf3normalized Tff7b72< T79c0ff0fTb4b4b4) Te6edf3normalized Tff7b72+ T79c0ff3T79c0ff6T79c0ff0f Tff7b72else Te6edf3normalized
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.12s